<?php if (!defined('INDEX')) { trigger_error("Index is not defined!", E_USER_ERROR); exit(); }
/**
 * Класс предоставляет api для экспорта закладок c хабры в формате XML
 *
 * @package      habrabookmarks
 *
 * @author       Max Kamashev <max.kamashev@floscoeli.com>
 * @copyright    floscoeli.com ©2009
 * @license      http://opensource.org/licenses/gpl-3.0.html
 * @version      SVN: $Id: xml_file.service.php 39 2009-03-26 20:34:07Z M.Kamashev $
 *
 * settings:     ts: 4 spaces, eof: lf (unix), codepage: UTF-8
 */
class xml_file extends Service {

    /**
     * @see services/Service#export
     */
    public $export = TRUE;

    /**
     * @see services/Service#import
     */
    public $import = FALSE;

    /**
     * @see system/Service#description()
     */
    public function description() {
        return "Экспорт в файл формата XML. Для использования в своих сервисах.";
    }

    /**
     * @see system/Service#help()
     */
    public function help() {
        return "";
    }

    /**
     * @see system/Service#exportBookmarks()
     */
    public function exportBookmarks($bookmarks) {
        $dom = new DOMDocument();
        $dom_bookmarks = $dom->appendChild(new DOMElement('bookmarks'));
        $dom_bookmarks->appendChild(new DOMElement('bookmark'));
        foreach ($bookmarks as $bookmark) {
            $dom_bookmark = $dom_bookmarks->appendChild(new DOMElement('bookmark'));
            $dom_bookmark->setAttribute('url', $bookmark['link']);
            $dom_bookmark->setAttribute('title', htmlspecialchars($bookmark['header']));
            $dom_bookmark->setAttribute('date', $bookmark['date']);
            $dom_bookmark->setAttribute('tags', htmlspecialchars(implode(',',$bookmark['tags'])));
            $cdata = $dom->createCDATASection(htmlspecialchars($bookmark['descr']));
            $dom_bookmark->appendChild($cdata);
        }
        header("Content-Type:text/xml");
        header('Content-Disposition: attachment; filename="habrabookmarks.xml"');
        die($dom->saveXML());
    }

    /**
     * @see system/Service#importBookmarks()
     */
    public function importBookmarks() {
        return FALSE;
    }

    /**
     * @see system/Service#importFormRender()
     */
    public function importFormRender() {
        return FALSE;
    }

    /**
     * @see system/Service#exportFormRender()
     */
    public function exportFormRender() {
        $form = "<form action='' method='post'>
            <input type='hidden' name='service' value='xml_file' />
            <input type='hidden' name='type' value='export' />
            <input type='submit' value='Поехали' />
        </form>";

        return $form;
    }

    /**
     * @see system/Service#exportValidate()
     */
    public function exportValidate() {
        //TODO В классе-сервисе не использовать сессию. Лучше создать свою переменную, куда уже закидывать значения. Возможно сделать её параметром метода
        if ( count($_SESSION['bookmarks']) > 0 ) {
            return TRUE;
        } else {
            trigger_error("xml_file: Нет закладок для экспорта.", E_USER_NOTICE);
            return FALSE;
        }
    }

    /**
     * @see system/Service#importValidate()
     */
    public function importValidate() {
        return FALSE;
    }

}